gtkgesture: ::cancel if a claimed sequence goes denied
authorCarlos Garnacho <carlosg@gnome.org>
Wed, 5 Aug 2020 21:51:50 +0000 (23:51 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Wed, 5 Aug 2020 22:01:18 +0000 (00:01 +0200)
The regular paths just emit ::end, which isn't the whole thing.
This gives an opportunity to gestures that are stolen the sequence
to clean themselves up.

gtk/gtkgesture.c

index 1a791d3339ce62939484fd2d628e16709fd8a07f..544ef87bd36158ec0c553c2cde1753dac7a99953 100644 (file)
@@ -1014,6 +1014,10 @@ gtk_gesture_set_sequence_state (GtkGesture            *gesture,
       data->state != GTK_EVENT_SEQUENCE_NONE)
     return FALSE;
 
+  if (state == GTK_EVENT_SEQUENCE_DENIED &&
+      data->state == GTK_EVENT_SEQUENCE_CLAIMED)
+    _gtk_gesture_cancel_sequence (gesture, sequence);
+
   data->state = state;
   gtk_widget_cancel_event_sequence (gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (gesture)),
                                     gesture, sequence, state);